\subsection{Darstellung}
\label{subsec:Darstellung}
Im Allgmeinen wird zur Darstellung von Blockciphern neben einer Referenz-Implementierung (zumeist in C oder C++) auch eine graphische Darstellung des Algorithmus angegeben.\\
Zwar existiert zur Darstellung kein Standard, die Diagramme lehnen allerdings an Flussdiagramme an und verwenden im Allgemeinen hinreichend \"ahnliche graphische Notationen f\"ur einzelne Bausteine und den Gesamtaufbau, so dass es zwar in einzelnen Ver\"offentlichungen zu leichten Abweichungen vom hier beschriebnen Aufbau kommen kann, diese jedoch auf einfachem Wege in die hier beschriebene Notation \"uberf\"uhrt werden k\"onnen.\\
Im folgenden sollen einige solche Darstellungen angegeben werden in denen die meisten der oben genannten Bausteine auftauchen, und diese zum Teil identifiziert werden. 

\subsubsection{Allgemeine}
In den meisten Ver\"offentlichungen werden die Algorithmen als ungerichtete Graphen dargestellt. Die Verarbeitung erfolgt von oben nach unten und -- sofern nicht durch eine in Abschnitt \ref{subsubsec:datenfluss} beschriebene Regel anders verlangt -- von links nach rechts. Da vor allem die Kernfunktion eines Feistelnetzwerkes bzw. eine Runde eines Substitutions-Permutations-Netzwerkes von Interesse sind, werden zumeist nur sie dargestellt und f\"ur die Anzahl der Runden wird auf die Beschreibung des Algorithmus verwiesen.

\subsubsection{Bl\"ocke}
\label{subsubsec:bloecke}
In der graphischen Darstellung werden die zu verarbeitenden Bl\"ocke als Rechtecke unterschiedlicher Gr\"osse dargestellt. Die Blockl\"ange wird im Rechteck angegeben. Ist die Gr\"osse des Blocks implizit bekannt, kann auf diese Angabe verzichtet werden.\\
Wird ein Block in kleinere Teilbl\"ocke aufgespalten, wird dies graphisch durch eine Kante vom Rechteck des Ursprungsblocks zu einem gleich grossen Rechteck, das in eine beliebige Anzahl kleinerer Rechtecke gespalten ist, dargestellt. Hierbei wird angenommen, dass alle Teilbl\"ocke die gleiche Gr\"osse haben. Soll ein Block in mehrere unterschiedlich grosse Bl\"ocke aufgespalten werden, wird er zun\"achst in kleine Bl\"ocke aufgespalten, die dann wieder zu gr\"osseren zusammengefasst werden k\"onnen.\\
Das Zusammenfassen von Bl\"ocken geschieht dazu analog, ein in Teilrechtecke aufgespaltener Block wird durch eine Kante mit einem nicht gespaltenen Rechteck gleicher Gr\"osse verbunden.\\
Wird der gesamte Eingabeblock (oder ein Teil davon) bereits von Beginn des Algorithmus an nur geteilt verwendet, wird auf eine initiale Umwandlung verzichtet. 
\begin{figure}[htp]
\centering
\includegraphics{figures/Blockdivision.eps}
\caption{Blockaufspaltung und -zusammenf\"uhrung}
\end{figure}

\subsubsection{Operationen}
\label{subsubsec:Operationen}
Die in Abschnitt \ref{subsubsec:sbox2} bis \ref{subsubsec:ganzzahlen} beschriebnen Operationen werden in der graphischen Darstellung, mit Ausnahme von $xor$, $modularer\ Addition$ und \textit{modularer\ Multiplikation}, durch ein Rechteck dargestellt, das mit einer der genannten Abk\"urzungen oder dem Operationsnamen selbst beschriftet ist. 
\begin{figure}[htp]
\centering
\includegraphics{figures/Operations.eps}
\caption{Operationen}
\end{figure}
Zur Darstellung von $xor$ wird $\oplus$, \textit{modularer Addition} $\boxplus$ und \textit{modularer\ Multiplikation} $\circledast$ verwendet.\\
Die Eingabeparameter werden durch Kanten zur oberen H\"alfte der jeweiligen Operation, die Ausgabewerte durch Kanten von der unteren H\"alfte repr\"asentiert.\\ 
Alternativ k\"onnen alle Eingabeparameter auch durch Kanten an der linken Seite einer Operatorbox von oben nach unten und die Ausgabeparameter von oben nach unten an der rechten Seite angegeben werden.\\
Ist die Reihenfolge der Parameter relevant, geschieht die Nummerierung von links nach rechts beziehungsweise von oben nach unten.\\

\subsubsection{Referenzen}
Neben den oben beschriebenen M\"oglichkeiten, Ausgaben einer Funktion direkt durch eine Kante mit der Eingabe einer anderen zu verkn\"upfen, exisitert die M\"og\-lich\-keit, Referenzen auf Ausgaben zu verwenden. So werden beispielsweise zumeist die Rundenschl\"ussel $K_i$ nicht als Kanten aus dem Keyschedule direkt zur Kernfunktion gezeichnet, sondern es wird eine Refernez verwendet. Hierbei werden Namen wie $K_i$ verwendet. Diese werden ohne umschliessendes Rechteck mit einer Kante als Ein- oder Ausgabe einer Funktion verwendet. 

\subsubsection{Datenfluss}
\label{subsubsec:datenfluss}
Das Nachvollziehen des Datenflusses ist in der Regel vergleichsweise komplex, man kann allerdings nach folgendem Schema vorgehen:
\begin{enumerate}
\item Besitzt eine Box keine Eingabenparameter (Startblock), so sind alle Kanten Ausgabenparameter.
\item F\"uhrt eine Kante von einer Box nach unten, handelt es sich um einen Ausgabeparameter.
\item F\"uhrt eine Kante von oben in eine Box, handelt es sich um einen  Eingabeparameter.
\item Jede Kante, die Ausgabeparameter einer Box ist, ist Eingabeparameter f\"ur alle Boxen in die sie f\"uhrt.
\item F\"uhrt von einer Box keine Kante nach unten, annotiere, welche Kanten Eingabeparameter sind (siehe Abbildung 3). Bleiben Kanten unanotiert, pr\"ufe bei allen anliegenden Boxen, welche Kanten Eingabekanten sind. Setze fort bis alle Eingabekanten annotiert sind, setze alle unanotierten Kanten zu Ausgabekanten.
\end{enumerate}
Da der Graph endlich ist, kommt man mit diesem Verfahren immer zu einer Annotation des gesamten Graphen und kann damit den Datenfluss nachvollziehen.

\subsubsection{Feistelnetzwerke}
Werden die oben beschriebenen Regeln befolgt, ist die Konstruktion eines Feistelnetzwerkes bereits vollst\"andig beschrieben. Zum besseren Verst\"andnis soll sie hier allerdings explizit angegeben werden. Wir beschr\"anken uns auf die Grundform eines Feistelnetzwerkes, also eine Zweiteilung des Eingabeblocks und $xor$ zur Verkn\"upfung der Eingabebl\"ocke, wie sie in DES zum Einsatz kommt.\\
Der Eingabeblock wird nie in G\"anze verarbeitet, kann daher bereits von Beginn an in zwei Teilbl\"ocke zerlegt dargestellt werden (Abschnitt \ref{subsubsec:bloecke}). Der linke Teilblock wird mittels $xor$ mit dem durch die Kernfunktion vorverarbeiteten rechten Block verkn\"upft und wird danach zum rechten Teilblock der Ausgabe. Es wird also eine Kante vom linken Teilblock zu einem $\oplus$ gef\"uhrt, dessen zweite Eingangskante die Ausgangskante der Kernfunktion, dargestellt durch ein mit $F$ beschriftetes Rechteck (Abschnitt \ref{subsubsec:Operationen}) ist. Die Ausgangskante des $\oplus$ f\"uhrt dann zum rechten Teilblock der Ausgabe. Ebenso wird der rechte Block zum einen mit einer Kante direkt mit dem linken Ausgabeblock verbunden und weiter eine Kante zur Kernfunktion $F$ eingezeichnet. Als letztes wird eine Eingangskante von einer Referenz auf $K_i$, den $i$-ten Rundenschl\"ussel, zur Kernfunktion eingezeichnet, so dass sich folgendes Bild ergibt.
\begin{figure}[htp]
\centering
\includegraphics{figures/FeistelNetwork.eps}
\caption{Feistelnetzwerk}
\end{figure}

\subsubsection{Beispiele}
Die folgenden Darstellungen sind nach dem oben beschriebenen Verfahren konstruiert und sollen zur Illustration dienen. Sie stellen jeweils die Kernfunktion bzw. eine Runde des genannten Ciphers dar:\\
\newpage
Die folgende Darstellung zeigt eine Runde des SAFER Algorithmus. Da bei der Darstelungen mit $PHT$ beschrifftete Boxen (siehe Abschnitt \ref{subsubsec:Operationen}) anstatt zweier \textit{Additionen} verwendet werden, weicht die Darstellung leicht von der in \cite{SAFER} gegebenen ab, ist aber \"aquivalent.
\begin{figure}[htp]
\centering
\includegraphics[scale=2]{figures/SAFER.eps}
\caption{Eine Runde des SAFER-Algorithmus}
\end{figure}
\newpage
Die Kernfunktion des MacGuffin Algorithmus, eines unbalancierten Feistelnetzwerks, in dem zwei unterschiedlich grosse Teilb\"ocke verwendet werden.
\begin{figure}[htp]
\centering
\includegraphics[scale=2]{figures/MacGuffin.eps}
\caption{Kernfunktion des MacGuffin Algorithmus}
\end{figure}
\newpage
Die Kernfunktion des Blowfish-Algorithmus, eines invertierten Feistelnetzwerks, bei dem die Funktion des linken und rechten Teilblocks getauscht sind. Die Teilschl\"ussel werden in Blowfish als $P_{i}$ nicht $K_{i}$ bezeichnet. 
\begin{figure}[htp]
\centering
\includegraphics[scale=2]{figures/Blowfish.eps}
\caption{Kernfunktion des Blowfish Algorithmus}
\end{figure}
